package com.noble.glamour.ui.qiniu.play;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.noble.glamour.R;
import com.noble.glamour.bean.center.user.detail.UserDetail;
import com.noble.glamour.module.logic.application.ModuleMgr;
import com.noble.library.base.BaseAppCompatActivity;
import com.noble.library.image.ImageLoader;
import com.noble.library.log.PToast;
import com.noble.library.utils.ScreenUtils;
import com.pili.pldroid.player.PLMediaPlayer;
import com.pili.pldroid.player.widget.PLVideoTextureView;
import com.pili.pldroid.player.widget.PLVideoView;
import com.qiniu.shortvideo.play.PLPlayMgr;
import com.qiniu.shortvideo.utils.PLConstant;
import com.qiniu.shortvideo.utils.PLUtils;

/**
 * 视频集：女性视频管理页
 * Created by Su on 2017/11/14.
 */
public class PLManagerActivity extends BaseAppCompatActivity implements View.OnClickListener {
    private PLVideoTextureView mVideoView;          // 实现媒体播放功能，内部封装了PLMediaPlayer提供的播放功能
    private String mVideoPath;                      // 播放文件地址

    private boolean showBottom = false;
    private LinearLayout video_mgr;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pl_manager_video);
        initView();
    }

    private void initView() {
        initVideo();
        UserDetail userDetail = ModuleMgr.getCenterMgr().getMyInfo();
        video_mgr = (LinearLayout) findViewById(R.id.video_mgr);
        ImageView iv_head = (ImageView) findViewById(R.id.iv_head);
        TextView tv_name = (TextView) findViewById(R.id.tv_name);
        RelativeLayout video_header = (RelativeLayout) findViewById(R.id.video_header);
        video_header.setPadding(0, ScreenUtils.getStatusBarHeight(this), 0, 0);
        ImageLoader.loadCircleAvatar(this, userDetail.getAvatar(), iv_head);
        tv_name.setText(String.valueOf(userDetail.getNickname()));

        video_mgr.setVisibility(View.GONE);
        findViewById(R.id.video_auth).setOnClickListener(this);
        findViewById(R.id.video_delete).setOnClickListener(this);
        findViewById(R.id.btn_close).setOnClickListener(this);
        findViewById(R.id.video_handle).setOnClickListener(this);
    }

    private void initVideo() {
        mVideoView = (PLVideoTextureView) findViewById(R.id.video);
        mVideoPath = getIntent().getStringExtra(PLConstant.VIDEO_PLAY_PATH);
        mVideoView.setLooping(true);
//        mVideoView.setCoverView(view);     // 设置播放封面图片
        mVideoView.setAVOptions(PLPlayMgr.getInstance().getOptions()); // 配置播放参数
        mVideoView.setVideoPath(mVideoPath);         // 设置播放地址

        // 设置加载动画， 在播放器进入缓冲状态时，自动显示加载界面，缓冲结束后，自动隐藏加载界面
        // View loadingView = findViewById(R.id.LoadingView);
        // mVideoView.setBufferingIndicator(loadingView);

        // 4.3.5 设置播放状态监听器, SDK提供了丰富的播放状态消息回调
        mVideoView.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
        mVideoView.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
        mVideoView.setOnCompletionListener(mOnCompletionListener);
        mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_ORIGIN);      // 设置画面预览模式： 原始尺寸
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.video_auth:
                PToast.showShort("权限设置");
                break;

            case R.id.video_delete:
                PToast.showShort("删除");
                break;

            case R.id.video_handle:
                video_mgr.setVisibility(showBottom ? View.VISIBLE : View.GONE);
                showBottom = !showBottom;
                break;

            case R.id.btn_close:
                finish();
                break;
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        mVideoView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mVideoView.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mVideoView.stopPlayback();
    }

    /**
     * 监听播放结束的消息，该回调的时机
     * <p>
     * 1，如果是播放文件，这是播放到文件结束后产生回调
     * 2，如果是在线视频，则会在读取到码流的EOF信息后产生回调，回调前会先播放完已缓冲的数据
     * 3，如果播放过程中产生onError，并且没有处理的话，最后也会回调本接口
     * 4，如果播放前设置了 setLooping(true), 则播放结束后会自动重新开始，不会回调本接口
     */
    private PLMediaPlayer.OnCompletionListener mOnCompletionListener = new PLMediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(PLMediaPlayer plMediaPlayer) {
            PLUtils.log("Play Completed !");
            PToast.showShort("Play Completed !");
            finish();
        }
    };

    /**
     * 监听当前播放器已经缓冲的数据量占整个视频时长的百分比，在播放直播流中无效，
     * 仅在播放文件和回放时才有效
     */
    private PLMediaPlayer.OnBufferingUpdateListener mOnBufferingUpdateListener = new PLMediaPlayer.OnBufferingUpdateListener() {
        @Override
        public void onBufferingUpdate(PLMediaPlayer plMediaPlayer, int precent) {
            PLUtils.log("onBufferingUpdate: " + precent);
        }
    };

    /**
     * 监听当前播放的视频流的尺寸信息，在SDK解析出视频的尺寸信息后，会触发该回调
     * 可以在该回调中调整UI的视图尺寸
     */
    private PLMediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = new PLMediaPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(PLMediaPlayer plMediaPlayer, int width, int height) {
            PLUtils.log("onVideoSizeChanged: width = " + width + ", height = " + height);
        }
    };

}
